#pragma once
#ifndef OBR_SOLIDCOLORBACKGROUND_H
#define OBR_SOLIDCOLORBACKGROUND_H

#include "common.h"
#include "core/Background.h"

namespace OBR
{
class SolidColorBackground : public Background, public Configurable<SolidColorBackground>
{
public:
    Spectrum radiance;

private:
public:
    SolidColorBackground(Spectrum _color = Spectrum(0.0f)); // set using given color
    ~SolidColorBackground();

    /* ------------------------ override ProgramEntry ----------------------- */

    /**
     * @brief upload data to sbt payload
     *
     */
    void uploadSbtData() override;

protected:
    /* ------------------------ override Configurable ----------------------- */

    /**
     * @brief create object from config
     *
     * @param config
     */
    void _buildFromConfig(const Json::Value &config) override;

private:
    /* ------------------------ override ProgramEntry ----------------------- */

    /**
     * @brief Get the Program Group Options of this type
     *
     * @return OptixProgramGroupOptions&
     */
    OptixProgramGroupOptions &getProgramGroupOptions() override;

    /**
     * @brief Get the Program Group Desc of this type
     *
     * @return OptixProgramGroupOptions&
     */
    OptixProgramGroupDesc &getProgramGroupDesc() override;
};

} // namespace OBR

#endif